/**
 * @description utils controller
 * @author captern
 */
const fse = require('fs-extra')
const path = require('path')
const { ErrorModel, SuccessModel } = require('../model/ResModel')
const { uploadFileSizeFailInfo } = require('../model/ErrorInfo')

// 存储目录
const DIST_FOLDER_PATH = path.join(__dirname, '..', '..', 'uploadFiles')
const MIX_SIZE = 1024 * 1024 * 1024 * 3  //  1024 * 1024 * 1024  = 1 M

// 是否需要创建目录
fse.pathExists(DIST_FOLDER_PATH).then(exist => {
  if(!exist) { // 不存在目录，则创建
    fse.ensureDir(DIST_FOLDER_PATH)
  }
})
/**
 * 保存文件
 * @param {string} name 文件名称
 * @param {string} type 文件类型
 * @param {number} size 文件体积大小
 * @param {string} filePath 文件路径
 * @returns {Promise<ErrorModel|*>}
 */
async function saveFile({ name, type, size, filePath}) {
  if(size > MIX_SIZE) {
    await fse.remove(filePath)  // 删除文件
    return new ErrorModel(uploadFileSizeFailInfo)
  }
  // 移动文件
  const fileName = Date.now() + '.' + name // 防止重名
  const distPilePath = path.join(DIST_FOLDER_PATH, fileName) // 文件目的地
  await fse.move(filePath, distPilePath)

  // 返回信息
  return new SuccessModel({
    url: '/' + fileName
  })
}

module.exports = {
  saveFile
}
